// 现在 Promise 基本上不用关心浏览器兼容性了, 而且 IE马上也要推出历史舞台了.
// 最好能手写 promise


//Promise 是一个类, 我们可以 new Promise 创造一个实例
// promise 有三个状态,  1. 默认状态 pending 2. fulfilled 成功态 3. rejected 失败态

// 只有在 pending 状态的时候, 才能改变状态. 不可逆.

// 成功有成功的结果. 失败有失败的原因.
// 处理调用 resolve 和 reject 能改变状态外, 还可以使用 throw error 抛出异常, 也会执行到失败的逻辑
// let promise = new Promise((resolve, reject) => {
//   throw new Error("error")
//   resolve("ok")
// })
//
// // then 方法中提供两个参数. 1.成功回调,  2. 失败回调
// promise.then((value) => {
//   console.log("成功 value ->", value);
// }, (reason) => {
//   console.log("失败 reason ->", reason);
// })


// ======= 下面使用自己实现的 promise ==============
let Promise = require("./promise")

let promise = new Promise((resolve, reject) => {
  // throw new Error("new Error")
  // reject("sorry, faile")
  // resolve("ok")
  setTimeout(() => {
    reject("failed")
    resolve("ok")
  }, 1000)
})

// then 方法中提供两个参数. 1.成功回调,  2. 失败回调
promise.then((value) => {
  console.log("成功 value ->", value);
}, (reason) => {
  console.log("失败 reason ->", reason);
})

